1

第一种情况: 简单传值,子组件只负责显示;
父组件向子组件传递一个hello word; 子组件接收并显示出来;
父组件Father.vue

<template>
  <div id="app">
    <Child :msg = "message"/>
  </div>
</template>
<script>
import Child from './Child'

export default {
  name: 'App',
  data() {
    return {
      message: ""
    } 
  },
  components: {
    Child
  },
  mounted() {
    this.timer = setTimeout(() => {
      this.message = "hello world";
    }, 3000)  
  }
}
</script>

子组件Child.vue

<template>
  <div>
    {{msg}}
  </div>
</template>

<script>

export default {
  name: 'App',
  props: [
      "msg"
  ]
}
</script>

<style>

</style>

第二种情况:父组件向子组件传值,子组件接收传值并修改传值并显示到页面上;
我们可以使用watch 监听值的改变,当然我们也可以使用计算属性;
我们先来说第一种使用watch 监听:父组件不变;

子组件Child.vue

<template>
  <div>
    {{childMsg}}
  </div>
</template>

<script>

export default {
  name: 'App',
  props: [
      "msg"
  ],
  data() {
      return {
          childMsg: ""
      }
  },
  watch: {
      msg(newVal) {
          if(newVal !== "") {
              this.childMsg = newVal + "----child";
          }
      }
  }
}
</script>

<style>

</style>

说完了监听的,我们再来说一说计算属性的;父组件不变
子组件Child.vue

<template>
  <div>
    {{childMsg}}
  </div>
</template>

<script>

export default {
  name: 'App',
  props: [
      "msg"
  ],
  computed: {
      childMsg() {
          return this.msg + "----child";
      }
  }
}
</script>

<style>

</style>

当然我们可以给计算属性设置get,和set 方法,我在项目中就用到了这种方法,父组件传递给子组件一个对象,在子组件里接收这个对象,并修改这个对象;
父组件Father.vue

<template>
  <div id="app">
    <Child :value = "data"/>
  </div>
</template>
<script>
import Child from './Child'

export default {
  name: 'App',
  data() {
    return {
      data: null
    } 
  },
  components: {
    Child
  },
  mounted() {
    this.timer = setTimeout(() => {
      this.data = {
        "name": "south Joe",
        "age": 16,
      }
    }, 3000)  
  }
}
</script>

子组件Child.vue

<template>
  <div>
    {{message}}
    <button @click="handleModify">修改年龄,姓名</button>
  </div>
  
</template>

<script>

export default {
  name: 'App',
  props: [
      "value"
  ],
  computed: {
      message: {
        get: function() {

            if(this.value) {
                return [this.value.name,this.value.age]
            }
            
        },
        set: function(newValue) {
            this.value.name = newValue[0];
            this.value.age = newValue[1];
        }
      }
  },
  methods: {
      handleModify() {
          this.message = ["yangyang",17];
      }
  }
}
</script>

<style>

</style>

职场小白south Joe,望各位大神批评指正,祝大家学习愉快!


南乔
15 声望3 粉丝

我爱敲代码,代码给我快乐